﻿using System;
using System.Collections.Generic;
using Business.Entity.Contabil;
using NHibernate.Criterion;

namespace Business.Entity.Vendas.MovimentacaoCaixa.SubClass.PagamentoCliente
{
    public class PagamentoClienteRepository : RepositoryBase<PagamentoCliente>
    {
        public static IList<PagamentoCliente> PagamentosDia(int caixa)
        {
            return GetSession().CreateCriteria<PagamentoCliente>().Add(
                Restrictions.Where<PagamentoCliente>(
                    cliente => cliente.DataMovimento == Utils.Configuracao.DiaProcessamento &&
                               cliente.Caixa == caixa)).List<PagamentoCliente>();
        }

        public static PagamentoCliente Save(PagamentoCliente pag)
        {

            
            var t = GetSession().BeginTransaction();
            try
            {
                if (pag.Valor < 0)
                {
                    pag.Valor *= -1;
                }

                pag.Caixa = Utils.Terminal.ConfiguracaoEcf.Caixa;
                pag.DataMovimento = Utils.Configuracao.DiaProcessamento;
                pag.Usuario = Utils.UsuarioAtual;
                
                var lanc = new Lancamento()
                {
                    DataLancamento = pag.DataMovimento,
                    TipoLancmento = pag.TipoRecebimento.TipoLancamento,
                    Pessoa = pag.Pessoa,
                    Valor = pag.Valor,
                    Desconto = pag.Descontos,
                    Historico = pag.Historico,
                    Documento = pag.Documento
                };
                LancamentoRepository.GeraPartida(lanc);
                GetSession().Save(pag);
                GetSession().Save(lanc);
            }
            catch (Exception)
            {
                t.Rollback();
                throw;
            }
            return pag;
        }
    }
}
